package com.diandi.ddsb.mapper;

import com.diandi.ddsb.bean.Role;
import com.diandi.ddsb.bean.RoleResourceRef;
import com.diandi.ddsb.vo.RoleMangerDto;
import com.diandi.ddsb.vo.RoleMangerVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * 角色管理
 * 
 */
@Repository
public interface CenterRoleDao {

	/**
	 * 插入角色
	 * 
	 * @return
	 */
	public int insertRole(Role role);

	/**
	 * 添加角色与资源关联关系
	 * 
	 * @param resourceRef
	 * @return
	 */
//	public int insertRoleResRef(RoleResourceRef resourceRef);

	/**
	 * 批量添加角色与资源关联关系
	 * 
	 * @return
	 */
	public void batchInsertRoleResRef(@Param("list") List<RoleResourceRef> ltRoleResourceRef);

	/**
	 * 根据角色名称查询角色信息
	 * 
	 * @param roleName
	 * @return
	 */
	public List<RoleMangerDto> queryRoleInfoByRoleName(@Param(value = "roleName") String roleName);

	/**
	 * 根据ID查询角色信息
	 * 
	 * @param roleId
	 * @return
	 */
	// public RoleMangerVo findRoleInfoById(long roleId);

	/**
	 * 更新角色名称
	 * 
	 * @param roleId
	 * @param roleName
	 * @return
	 */
//	public boolean updateRoleName(long roleId, String roleName);

	/**
	 * 更新角色
	 * 
	 * @return
	 */
	public int updateRole();

	/**
	 * 查询角色
	 * 
	 * @param RoleName
	 * @return
	 */
//	public List<Role> queryRoleByRoleName(@Param(value = "roleName") String roleName);

	/**
	 * HEAD 获取资源列表
	 * 
	 * @return
	 */
	public List<Map> getResourceList();

	/**
	 * 获取所有角色
	 * 
	 * @return
	 */
	public List<Role> findAllRole();

	/**
	 * 找到根角色
	 * 
	 * @return
	 */
	public Role findRootRole(long rootParentId);

	/**
	 * 找到当前节点下的所有子节点
	 * 
	 * @param roleId
	 * @return
	 */
	public List<Role> findAllChildrenById(long roleId);

	/**
	 * 根据id查询
	 * 
	 * @param id
	 * @return
	 */
	RoleMangerVo findById(long id);

	/**
	 * 根据名称查询
	 * 
	 * @param name
	 * @return
	 */
	public Role findByRoleName(String roleName);

	/**
	 * 更新全路径
	 * 
	 * @param id
	 * @param fullPath
	 * @return
	 */
	public void updateFullPath(@Param(value = "id") long id,
                               @Param(value = "fullPath") String fullPath);

	/**
	 * @param roleName
	 * @return
	 */
	public Role findByRoleNameBesideSelf(@Param(value = "roleName") String roleName,
                                         @Param(value = "id") long id);

	/**
	 * 更新role
	 * 
	 * @param role
	 */
	public void updateRole(Role role);

	/**
	 * 删除
	 * 
	 * @param id
	 */
	public void delete(long id);

	/**
	 * 根据id查找父角色
	 * 
	 * @param parentId
	 * @return
	 */

	public Role findParentById(@Param(value = "id") long id);

	/**
	 * 获取系统管理员角色
	 * 
	 * @return
	 */
	RoleMangerVo getAdminRole();

	public Integer queryAdminRoleCount(@Param(value = "roleId") long roleId);

}
